package com.fstart.sys.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fstart.common.Result;
import com.fstart.sys.entity.Summarize;
import com.fstart.sys.entity.Todo;
import com.fstart.sys.service.ISummarizeService;
import com.fstart.sys.service.ITodoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author Xibing
 * @since 2023-04-23
 */
@RestController
@RequestMapping("/sys/todo")
public class TodoController {

    @Autowired
    private ITodoService todoService;

    @Autowired
    private ISummarizeService summarizeService;

    // 查询每个用户的所有待办项 Result<List<Todo>>
    @GetMapping("/all")
    public Result<List<Todo>> getAllById(@RequestParam Integer userId){
        List<Todo> data = todoService.getALlById(userId);


        if (data != null){
            return Result.success(data, "用户待办项查询完成");
        }
        return Result.fail(20001,"查询失败");
    }


    // 添加todo
    @PostMapping("/save")
    public Result<?> saveTodo(@RequestBody Todo todo){
        System.out.println(todo.getCreateTime());
        todo.setStatus(0);
        if(todo.getCreateTime() == null) {
            todo.setCreateTime(LocalDateTime.now());
        }

        todoService.save(todo);
        return Result.success("保存待办项成功");
    }

    // 更新状态
    @PutMapping("/{todoId}")
    public Result<?> updateStatus(@PathVariable Integer todoId){
        // 查询数据
        LambdaQueryWrapper<Todo> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Todo::getTodolistId, todoId);

        Todo todo = todoService.getOne(wrapper);
    
        // 修改状态
        if (todo.getStatus() == 0){
            todo.setStatus(1);
            //添加完成时间
            todo.setCompleteTime(LocalDateTime.now());
        }else{
            // 删除完成时间
            todo.setCompleteTime(todo.getCreateTime());
            todo.setStatus(0);
        }

        // 修改数据
        todoService.update(todo, wrapper);

        return Result.success("状态更新成功~");

    }

    /**
     * 删除todo
     * @param todoId
     * @return
     */
    @DeleteMapping("/{todoId}")
    public Result<?> deleteTodo(@PathVariable Integer todoId){
        // 根据id删除
        todoService.removeById(todoId);
        // 删除对应的描述
        LambdaQueryWrapper<Summarize> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Summarize::getTodoId, todoId);
        summarizeService.remove(wrapper);

        return Result.success("删除成功!");

    }

    /**
     * 更具用户Id查询当天的所有待办项
     * @param userId
     * @return
     */
    @GetMapping("/getByDay")
    public Result<List<Todo>> getTodoByDay(@RequestParam Integer userId){
        // 查询所有当天的待办项

        List<Todo> todos = todoService.getTodoByDay(userId);

        if(todos != null){
            return Result.success(todos, "查询当天待办项成功");
        }

        return Result.fail(20002, "查询数据为null");
    }

    // 根据用户ID查询往日所有未完成的todo
    @GetMapping("/allNoOverTodo")
    public Result<List<Todo>> getAllNoOverTodo(@RequestParam Integer userId){

        List<Todo> data = todoService.getNoOverTodo(userId);
        return Result.success(data, "查询完成");
    }

    // 将用户以往所有未完成的待办项添加到当天的待办项中
    @PutMapping("/isAdd/{userId}")
    public Result<?> isAdd(@PathVariable Integer userId){
        todoService.isAdd(userId);

        return Result.success("添加完成");
    }

    // 更具日期查询所有待办项
    @GetMapping("/getTodoByDate")
    public Result<List<Todo>> getTodoByDate(@RequestParam(value = "userId") Integer userId ,
                                   @RequestParam(value = "createTime") String createTime){

        Todo todo = new Todo();
        todo.setUserId(userId);
        todo.setCreateTime(LocalDateTime.parse(createTime));

        List<Todo> data = todoService.getTodoByDate(todo);

        return Result.success(data, "查询成功");
    }

    @GetMapping("/getOverTodo")
    public Result<List<Todo>> getOverTodo(@RequestParam Integer userId){
        Todo todo = new Todo();
        todo.setUserId(userId);
        todo.setIsNowDay(LocalDateTime.now());

        List<Todo> data = todoService.getOverTodo(todo);

        return Result.success(data);
    }

}
